#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<string>
#include<vector>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<unordered_map>
#include<unordered_set>
#include <bitset>
#include<algorithm>
using namespace std;
using ll = long long;
const int N = 2e5 + 8;
int arr[N];
void solution()
{
    int n, m;cin >> n >> m;
    for (int i = 1;i <= n;++i) cin >> arr[i];
    int l = 1, r = 1, ret = 0;
    for (;l <= n;++l)
    {
        if ((arr[r] - arr[l]) <= m) r++;
        else ret += r - l;
    }
    cout << ret << '\n';
}
int main()
{
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int T = 1;cin >> T;
    while (T--) solution();
    return 0;
}
//using namespace std;
//using ll = long long;
//const int N = 2e5 + 8;
//int arr[N];
//void solution()
//{
//    int q;cin >> q;
//    priority_queue<int> heap;
//    int op, num;
//    while (cin >> op)
//    {
//        if (op == 1)
//        {
//            cin >> num;heap.push(num);
//        }
//        else heap.pop();
//    }
//    int ret = 0;
//    for (auto e : heap) ret += e;
//    cout << ret;
//}
//int main()
//{
//    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
//    int T = 1;
//    while (T--) solution();
//    return 0;
//}
//using namespace std;
//using ll = long long;
//class g
//{
//public:
//    bool operator()(const book& e1, const book& e2)
//    {
//        if (e1._h > e2._h) return true;
//        if (e1._h == e2._h && e1._t > e2._t) return true;
//        if (e1._h == e2._h && e1._t == e2._t && e1._w > e2._w) return true;
//        else return false;
//    }
//};
//struct book
//{
//    int _h, _t, _w;
//};
//const int N = 2e5 + 8;
//vector<book> v;
//
//void solution()
//{
//    int n;cin >> n;
//    int h, t, w;
//    while (n--)
//    {
//        cin >> h >> t >> w;
//        v.push_back({ h,t,w });
//    }
//    sort(v.begin(), v.end(), g());
//    for (auto e : v) printf("%d %d %d\n", e._h, e._t, e._w);
//}
//int main()
//{
//    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
//    int T = 1;
//    while (T--) solution();
//    return 0;
//}
//using namespace std;
//using ll = long long;
//const int N = 1e5 + 8;
//ll arr[N];
//void solution()
//{
//    int a, b;cin >> a >> b;
//    int ret = 0;
//    for (int i = 0;i < a;++i) ret ^= i;
//    if (ret == b) cout << a << '\n';
//    else if (ret != b && (ret ^ a )!= b) cout << a + 1 << '\n';
//    else cout << a + 2 << '\n';
//}
//int main()
//{
//    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
//    int T;cin >> T;
//    while (T--) solution();
//    return 0;
//}
//using namespace std;
//using ll = long long;
//const int N = 1e3 + 8;
//ll arr[N];
//void solution()
//{
//    int n;cin >> n;
//    for (int i = 1;i <= n;++i) cin >> arr[i];
//    int ret = 0;
//    for (int i = 1;i <= n;++i) ret ^= arr[i];
//    if (n % 2 == 0 && ret != 0) cout << -1 << '\n';
//    else cout << ret << '\n';
//}
//int main()
//{
//    int T;cin >> T;
//    while (T--) solution();
//    return 0;
//}
//
//using namespace std;
//#include "Blockqueue.hpp"
//
//void* Consumer(void* args)
//{
//    Blockqueue<int>* bq = static_cast<Blockqueue<int>*>(args);
//
//    while (true)
//    {
//        int data = bq->pop();
//
//    }
//}
//void* Productor(void* args)
//{
//    Blockqueue<int>* bq = static_cast<Blockqueue<int>*>(args);
//
//    while (true)
//    {
//        int data = 10;
//        bq->push(data);
//
//    }
//}
//int main()
//{
//    Blockqueue<int>* bq = new Blockqueue<int>();
//    pthread_t c, p;
//    pthread_create(&c, nullptr, Consumer, bq);
//    pthread_create(&p, nullptr, Productor, bq);
//
//    pthread_join(c, nullptr);
//    pthread_join(p, nullptr);
//    return 0;
//}